import { ImagePreview } from 'vant';
import router from '../router';
//浙里办提供的通用API 见：https://op-irs.zj.gov.cn/mobile/login?goto=/mobile/documents/technology/1713800105515
// 接收两个参数 funcName：方法名称（String）必填， args：参数对象（Object）不需要参数的可以传空对象或者不传
const zlbApis =(funcName, args) => {
  // if(window.ZWJSBridge === undefined) {
  //   alert('浙里办未初始化，请重新进入系统')
  //   return '浙里办未初始化，请重新进入系统'
  // }
  return new Promise((resolve, reject) => {
    window.ZWJSBridge.onReady(() => {
      window.ZWJSBridge[funcName](args).then(res => {
        resolve(res);
      }).catch(err => {
        console.error(err);
        reject(err);
      });
    });
  });
};

// 文件预览 (内网文件无法通过微软的在线服务打开，只能通过页面插件实现)
// url: 文件路径, fileType: 文件后缀, source: 文件来源 （public：来自公网， private：来自内网）
const previewFile = file => {
  let { url, fileType, source } = file;
  fileType = fileType.toLowerCase();
  //office .doc .docx .xlsx .pptx
  const previewOfficeFile = (url, fileType, source) => {
    console.log(source);
    if(source === 'public') { // 文件是公网的
      let fileUrl = `https://view.officeapps.live.com/op/view.aspx?src=${ encodeURIComponent(url) }`;
      window.location.href = fileUrl;
      zlbApis('openLink', { url: fileUrl }).catch(err => {
        console.error(err,fileType, '11111');
        window.location.href = fileUrl;
        // router.push({ name: 'FilePreviewPage', params: { url, fileType, type: fileType } })
      });
    }else { // 文件是内网的
      router.push({ name: 'FilePreviewPage', params: { url, fileType, type: fileType } });
    }
  };
  //图片 'gif', 'jpg', 'jpeg', 'bmp', 'tiff', 'tif', 'png', 'svg'
  const previewImage = url => {
    if (Array.isArray(url)) {
      ImagePreview([ ...url ]);
    } else {
      ImagePreview([ url ]);
    }
  };
  //pdf
  const previewPdf = url => {
    zlbApis('openLink', { url }).catch(err => {
      console.error(err);
      router.push({ name: 'FilePreviewPage', params: { url, fileType, type: 'pdf' } });
    });
  };
  //视频 'mp4' 浙里办 ios 可能有问题
  const previewMp4 = url => {
    router.push({ name: 'FilePreviewPage', params: { url, fileType, type: 'video' } });
  };
  //音频 'mp3'
  const previewMp3 = url => {
    router.push({ name: 'FilePreviewPage', params: { url, fileType, type: 'audio' } });
  };
  //纯文本 'txt', 'json', 'js', 'css', 'java', 'py', 'html', 'jsx', 'ts', 'tsx', 'xml', 'md', 'log'
  const previewTxt = url => {
    router.push({ name: 'FilePreviewPage', params: { url, fileType, type: 'text' } });
  };
  const filter = [
    {
      file: [ 'doc','docx', 'xlsx', 'pptx', 'xls' ],
      type: 'office',
      handle: previewOfficeFile
    },
    {
      file: [ 'gif', 'jpg', 'jpeg', 'bmp', 'tiff', 'tif', 'png', 'svg' ],
      type: 'image',
      handle: previewImage
    },
    {
      file: [ 'pdf' ],
      type: 'pdf',
      handle: previewPdf
    },
    {
      file: [ 'mp4' ],
      type: 'video',
      handle: previewMp4
    },
    {
      file: [ 'mp3' ],
      type: 'audio',
      handle: previewMp3
    },
    {
      file: [ 'txt', 'json', 'js', 'css', 'java', 'py', 'html', 'jsx', 'ts', 'tsx', 'xml', 'md', 'log' ],
      type: 'text',
      handle: previewTxt
    }
  ];
  let func = filter.find(item => item.file.includes(fileType));
  if(func == undefined) {
    console.error('不支持该格式的在线预览，请下载后预览或转换为支持的格式，支持docx, xlsx, pdf, 以及纯文本格式和媒体格式的在线预览');
  } else {
    func.handle(url, fileType, source);
  }
};

// 埋点
const buryingPoint = async (zwfwSsoUserid, zwfwSsoUserRealName, route) => {
  let { domLoading, fetchStart, domContentLoadedEventEnd } = window.performance.timing;
  let t2 = (domLoading - fetchStart) / 1000;
  let t0 = (domContentLoadedEventEnd - fetchStart) / 1000;
  console.log(t2,t0);
  // 埋点 需要浙里办里的用户ID和真实姓名
  let { name, meta } = route;
  console.log(zwfwSsoUserid, zwfwSsoUserRealName);
  console.log(route,'1111111111111111');
  const zwlog = await new window.ZwLog({
    _user_id: zwfwSsoUserid || '',
    _user_nick: zwfwSsoUserRealName || '',
    t2,
    t0,
    log_status: '02'
  });
  console.log(zwlog);
  //onReady表示zwlog加载完成后的函数，它接收一个匿名函数，而sendPV与record方法均要在匿名函数内调用。
  zwlog.onReady(function () {
    //PV日志
    zwlog.sendPV({
      miniAppId: '2001895661', // 后端给的
      t2, // t2: '页面启动到加载完成的时间',
      t0, // t0: '页面启动到页面响应完成的时间',
      log_status: '02', // 进入系统埋点写死 02
      pageId: name,
      pageName: meta.title
    });
    //令箭日志
    console.log(zwlog.record);
    zwlog.record('yourTrackerEventCode', 'CLK', {
      Test1: '测试参数1',
    });
    // let { metaInfo } = zwlog; // SDK元配置的当前设置
  }).catch(error => {
    console.error(error);
  });
};

export { zlbApis, previewFile, buryingPoint };

// 浙里办Api
/*
  * 修改导航栏标题
  * 方法名称: setTitle
  * 参数: {
  *   标题内容: title(String)
  * }
  * example: this.$zlbApis('setTitle', { title: '标题内容' })
  */

/*
  * 发送短信
  * 方法名称: sms
  * 参数: {
  *   文本内容: text(String)
  *   电话号码: phoneNumber(String)
  * }
  * this.$zlbApis('sms', { text: '你吃饭了么', phoneNumber: '17568541454'})
  */

/*
  * 扫码
  * 方法名称: scan
  * 参数: {
  *   类型: type(String) //二维码：qrCode
  * }
  * this.$zlbApis('scan', { type: 'qrCode' })
  */

/*
  * 新开一个页面 (跳转第三方路径时，请使用此方法，location.href等方法会被检测出，导致编译失败)
  * 方法名称: openLink
  * 参数: {
  *   路径: url(String)
  * }
  * this.$zlbApis('openLink', { url: 'http://www.baidu.com' })
  */

/*
  * 展示蒙版
  * 方法名称: showPreloader
  * 参数: {
  *   蒙版消息: type(String)
  *   是否展示图标: showIcon(Boolean)
  * }
  * this.$zlbApis('showPreloader', { text: '蒙版消息', showIcon: true})
  */

/*
  * 隐藏蒙版
  * 方法名称: hidePreloader
  * 参数: {
  *   蒙版消息: type(String)
  *   是否展示图标: showIcon(Boolean)
  * }
  * this.$zlbApis('hidePreloader', { text: '蒙版消息', showIcon: true})
  */

/*
  * 选择图片
  * 方法名称: chooseImage
  * 参数: {
  *   是否上传: upload(Boolean)
  * }
  * this.$zlbApis('chooseImage', { upload: true})
  */

/*
  * 实人认证
  * 方法名称: zmAuthentication
  * 参数: {
  *   姓名: certName(Boolean)
  *   身份证: certNo(String)
  * }
  * this.$zlbApis('zmAuthentication', { certName: '张成辉', certNo: '320922199404157315'})
  */

/*
  * 分享链接
  * 方法名称: share || directShare
  * 参数: {
  *   路径: url(String)
  *   内容: content(String)
  *   标题: title(String)
  * }
  * this.$zlbApis('share', { url: 'http://www.zjzwfw.gov.cn/zjservice/front/index/page.do?webId=1', content: '测试', title: '标题'})
  */

/*
  * 获取设备唯一标识
  * 方法名称: getUUID
  * 参数: { }
  * this.$zlbApis('getUUID', {})
  */

/*
  * 关闭窗口
  * 方法名称: close
  * 参数: { }
  * this.$zlbApis('close', {})
  */

/*
  * 吐司信息
  * 方法名称: toast
  * 参数: {
  *   吐司信息: message(String)
  *   持续时间: duration(Number)
  * }
  * this.$zlbApis('toast', { message: '这是一条吐司', duration: 3 })
  */

/*
  * 获取网络状态
  * 方法名称: getNetworkType
  * 参数: { }
  * this.$zlbApis('getNetworkType', {})
  */

/*
  * 获取地理位置
  * 方法名称: getLocation
  * 参数: { }
  * this.$zlbApis('getLocation', {})
  */

/*
  * 打电话
  * 方法名称: phoneCall
  * 参数: {
  *   电话号码: corpId(String)
  * }
  * this.$zlbApis('phoneCall', { corpId: '16602194415' })
  */

/*
  * 输入框
  * 方法名称: prompt
  * 参数: {
  * "cancelButton": "取消",
  * "placeholder": "占位信息",
  * "title": "测试选择器",
  * "message": "信息",
  * "confirmButton": "确认",
  * "inputType": "text"
  * }
  * this.$zlbApis('prompt', {
  *  cancelButton: "取消",
  *  placeholder: "占位信息",
  *  title: "测试选择器",
  *  message: "信息",
  *  confirmButton: "确认",
  *  inputType: "text"
  * })
  */

/*
  * 选择器
  * 方法名称: actionSheet
  * 参数: {
  *   选项: otherButtons(Array)
  *   取消按钮: cancelButton(String)
  *   标题: title(String)
  * }
  * this.$zlbApis('actionSheet', {
  *   otherButtons: [
  *   "按钮1",
  *   "按钮2"
  *   ],
  *   cancelButton: '取消'
  *   title: '测试选择器'
  * })
  */

/*
  * 获取本地存储的键值对
  * 方法名称: getLocalStorage
  * 参数: {
  *   键名: key(String)
  * }
  * this.$zlbApis('getLocalStorage', { key: 'uiStyle' })
  */

/*
  * 设置本地存储的键值对
  * 方法名称: setLocalStorage
  * 参数: {
  *   键名: key(String)
  *   键值: value(String)
  * }
  * this.$zlbApis('getLocalStorage', { key: 'uiStyle', value: 'elder' })
  */

/*
  * 根据键删除值
  * 方法名称: removeLocalStorage
  * 参数: {
  *   键名: key(String)
  * }
  * this.$zlbApis('removeLocalStorage', { key: 'uiStyle' })
  */

/*
  * 支付
  * 方法名称: pay
  * 参数: {
  *     "credential": "1234567",
  *     "arg": {
  *       "inSandBox": true,
  *       "credential": "123456"
  *     },
  *     "inSandBox": true,
  *     "platform": "3"
  * }
  * this.$zlbApis('pay', {
  *   "credential": "1234567",
  *   "arg": {
  *     "inSandBox": true,
  *     "credential": "123456"
  *   },
  *   "inSandBox": true,
  *   "platform": "3"
  * })
  */

/*
  * 确认框
  * 方法名称: confirm
  * 参数: {
  *   标题: title(String)
  *   按钮: buttonLabels(Array)
  * }
  * this.$zlbApis('confirm', { title: '测试确认框', buttonLabels: [ "按钮1", "按钮2" ] })
  */

/*
  * 登录
  * 方法名称: login
  * 参数: { }
  * this.$zlbApis('login', {})
  */

/*
  * 提示框
  * 方法名称: alert
  * 参数: {
  *   标题: title(String)
  *   按钮名: buttonName(String)
  *   信息: message(String)
  * }
  * this.$zlbApis('alert ', { title: '测试确认框', buttonName: 'ok', message: 'asdasd' })
  */

/*
  * 获取用户类型
  * 方法名称: getUserType
  * 参数: {}
  * this.$zlbApis('getUserType ', {})
  */

/*
  * 选城市
  * 方法名称: selectCity
  * 参数: {}
  * this.$zlbApis('selectCity ', {})
  */

/*
  * 获取剪切板内容
  * 方法名称: getClipboardData
  * 参数: {}
  * this.$zlbApis('getClipboardData ', {})
  */

/*
  * 设置剪切板内容
  * 方法名称: setClipboardData
  * 参数: {
  *   文本: text(String)
  * }
  * this.$zlbApis('setClipboardData ', { text: '剪切板消息' })
  */

/*
  * 保存图片
  * 方法名称: saveImage
  * 参数: {
  *   文本: url(String)
  * }
  * this.$zlbApis('saveImage ', { text: 'https://zhang759740844.github.io/images/avatar.png' })
  */

/*
  * 获取用户当前地区
  * 方法名称: getCurrentLocationCity
  * 参数: {}
  * this.$zlbApis('getCurrentLocationCity  ', {})
  */

/*
  * 设置按钮
  * 方法名称: setMenu
  * 参数: {
  * "items": [
  *   {
  *     "id": "aaa",
  *     "iconUrl": "https://zhang759740844.github.io/images/avatar.png",
  *     "type": 1
  *   },
  *   {
  *     "id": "sssa",
  *     "iconUrl": "https://zhang759740844.github.io/images/avatar.png",
  *     "type": 0
  *   }
  * ]
  * }
  *
  * this.$zlbApis('getCurrentLocationCity  ', {
  *   items: [
  *     {
  *       "id": "aaa",
  *       "iconUrl": "https://zhang759740844.github.io/images/avatar.png",
  *       "type": 1
  *     },
  *     {
  *       "id": "sssa",
  *       "iconUrl": "https://zhang759740844.github.io/images/avatar.png",
  *       "type": 0
  *     }
  *   ]
  * })
  */

/*
  * 文件下载
  * 方法名称: downloadFile
  * 参数: { 文件路径: url(String)}
  * this.$zlbApis('downloadFile  ', { url: 'https://xxx.com.cn/testfile.xlsx' })
  */
